/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package blogic;

import alogic.alAlgMetaHeu;
import bentity.beLote;
import bentity.beOrdenDespacho;
import bentity.bePallet;
import bentity.beUbicacion;
import com.itextpdf.text.pdf.codec.wmf.Point;
import dao.daoOrdenDespacho;
import dao.daoUbicacion;
import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author cesar
 */
public class blUbicacion {

    
    public ArrayList<String> getTipoEstado() throws SQLException{
        return (new daoUbicacion().getTipoEstado());
                
    }
    public ArrayList<Integer> getTipoEstadoInt() throws SQLException{
        return (new daoUbicacion().getTipoEstadoInt());

    }

    public ArrayList<Integer> getPosicion_X_Y(int idUbicacion) throws SQLException{
        return (new daoUbicacion().getPosicion_X_Y(idUbicacion));

    }

    public ArrayList<beUbicacion> obtenerUbicacion(int estado) throws SQLException{
         return (new daoUbicacion().obtenerUbicacion(estado));
    }

    public ArrayList<beUbicacion> obtenerUbicacionDisponible(ArrayList<beUbicacion> ubiOcupadas,ArrayList<beUbicacion> ubiReservadas) throws SQLException{
         return (new daoUbicacion().obtenerUbicacionDisponible(ubiOcupadas,ubiReservadas));
    }

    public ArrayList<beUbicacion> obtenerUbicacionBloqueadas(ArrayList<beUbicacion> ubiOcupadas,ArrayList<beUbicacion> ubiReservadas) throws SQLException{
         return (new daoUbicacion().obtenerUbicacionBloq(ubiOcupadas,ubiReservadas));
    }

    public int registrarUbi(int idUbi,int idPallet,Date fecha,int estado) throws SQLException{
        return (new daoUbicacion().registrarUbi(idUbi,idPallet,fecha,estado));
    }

    public int actualizarUbi(int idUbi,int idPallet, int estado,String motivo) throws SQLException{
        return (new daoUbicacion().actualizarUbi(idUbi,idPallet,estado,motivo));

    }

    public int bloquear(int id,int estado) throws SQLException{
        return (new daoUbicacion().bloquear(id,estado));
    }
    public int desbloquear(int id,int estado) throws SQLException{
        return (new daoUbicacion().desbloquear(id,estado));
    }
    public boolean estaDesbloqueado(int id) throws Exception{
        return (new daoUbicacion().estaDesbloqueado(id));
    }

    public int eliminarUbi(int idUbi,int idPallet) throws SQLException{
        return (new daoUbicacion().eliminarUbi(idUbi,idPallet));
    }

    public beUbicacion dameUbicacionSegunCoordenadas(int x,int y, int piso) throws Exception{
        return (new daoUbicacion().dameUbicacionSegunCoordenadas(x,y,piso));
    }

    public boolean estaDesbloqueado(int x,int y,int piso) throws Exception{
        return (new daoUbicacion().estaDesbloqueado(x,y,piso));
    }

     public boolean validarTabla(int estado) throws Exception{
        return (new daoUbicacion().validarTabla(estado));
    }

    public boolean validarUbiDisp() throws Exception{
        return (new daoUbicacion().validarUbiDisp());
    }

    public boolean validarUbiDispBloq() throws SQLException{
         return (new daoUbicacion().validarUbiDispBloq());
    }

    public ArrayList<beUbicacion> obtenerUbiXProd(int idProducto) throws SQLException{
      return (new daoUbicacion().obtenerUbiXProd(idProducto));
    }

    public ArrayList<beUbicacion> dameUbicacionesPosibles(int idTipoProducto, int tipoPallet)throws Exception{
        return (new daoUbicacion()).dameUbicacionesPosibles(idTipoProducto,tipoPallet);
    }

    public ArrayList<beUbicacion> obtenerUbicaciones(String strFila,String strRack,String strPiso,String strUbi) throws SQLException{

       return (new daoUbicacion().obtenerUbicaciones(strFila,strRack,strPiso,strUbi));
    }

     public ArrayList<beUbicacion> obtenerUbicaciones_CargaMasiva(String strFila,String strRack,String strPiso,String strUbi) throws SQLException{

       return (new daoUbicacion().obtenerUbicaciones_CargaMasiva(strFila,strRack,strPiso,strUbi));
    }
     

    public int registrarUbiHoy(ArrayList<bePallet> arrPallets) throws Exception{
        return (new daoUbicacion().registrarUbiHoy(arrPallets));
    }

    public int reservarUbicaciones(int idOrdenDespacho, ArrayList<beUbicacion> ordenOptimoUbics) throws Exception{
        (new daoOrdenDespacho()).actualizarEstadoOrden(idOrdenDespacho,beOrdenDespacho.O_RESERVADA);
        return (new daoUbicacion()).reservarUbicaciones(idOrdenDespacho, ordenOptimoUbics);
    }

    public int actualizarUbiXDespacho(int idDespacho,int estado,String motivo) throws SQLException{
        return (new daoUbicacion()).actualizarUbiXDespacho(idDespacho,estado,motivo);
    }

    public ArrayList<beUbicacion> dameTodasLasUbicaciones() throws Exception {
        return (new daoUbicacion().dameTodasLasUbicaciones());
    }

    public void registrarIngresoPallets(ArrayList<beLote> arrLotes) throws Exception{
        int bien=-1;

        for(int i=0; i<arrLotes.size();i++){
            this.registrarUbiHoy(arrLotes.get(i).getPallets());
            

            //if(bien<0) return;
        }
    }

    public ArrayList<beUbicacion> dameTodasLasUbicacionesDisponibles() throws Exception{

        return(new daoUbicacion().dameTodasLasUbicacionesDisponibles());
    }

    public ArrayList<beUbicacion> dameTodasLasUbicacionesBloqueadas() throws Exception{

        return(new daoUbicacion().getTodasUbicacionesBloqueadas());
    }

    public String dameEstado(int idUbicacion) throws SQLException{
        return (new daoUbicacion().dameEstado(idUbicacion));
    }

    public ArrayList<Point> getUbsInRackByXY(int x, int y)throws SQLException{
        return (new daoUbicacion().getUbsInRackByXY(x,y));
    }

    public ArrayList<bePallet> dameUbicacionesOcupada(ArrayList<beUbicacion> ubicacionesOcupadas,int estado,String fila,String rack,String piso,String ubicacion,ArrayList<String> estados) throws SQLException{
        return (new daoUbicacion().dameUbicacionesOcupada(ubicacionesOcupadas,estado,fila,rack,piso,ubicacion,estados));
    }

    public ArrayList<beUbicacion> dameUbicacionesPosiblesXFiltros(int tipoProd,int tipoP,String strFila, String strRack,String strPiso,String strUbi) throws SQLException{
        return (new daoUbicacion().dameUbicacionesPosiblesXFiltros(tipoProd, tipoP, strFila, strRack, strPiso, strUbi));
    }

    public ArrayList<beUbicacion> obtenerUbicacionDisponibleXFiltros(ArrayList<beUbicacion> ubicacionesOcupadas,ArrayList<beUbicacion> ubicacionesReservadas,String strFila,String strRack,String strPiso,String strUbi) throws SQLException{
        return (new daoUbicacion().obtenerUbicacionDisponibleXFiltros(ubicacionesOcupadas, ubicacionesReservadas, strFila, strRack, strPiso, strUbi));
    }

     public ArrayList<beUbicacion> obtenerUbicacionBloqueadasXFiltros(ArrayList<beUbicacion> ubicacionesOcupadas,ArrayList<beUbicacion> ubicacionesReservadas,String strFila,String strRack,String strPiso,String strUbi) throws SQLException{
        return (new daoUbicacion().obtenerUbicacionBloqueadasXFiltros(ubicacionesOcupadas, ubicacionesReservadas, strFila, strRack, strPiso, strUbi));
    }

    public ArrayList<beUbicacion> getTodasUbicaciones() throws SQLException{
        return (new daoUbicacion().getTodasUbicaciones());
    }

    public  alAlgMetaHeu ubicacionesXOrden(int idOrden) throws Exception{
        return (new daoUbicacion().ubicacionesXOrden(idOrden));
    }
    public beUbicacion obtenerUbicacionXCajas(int numCajas, int idProducto) throws SQLException{
        return (new daoUbicacion().obtenerUbicacionXCajas(numCajas,idProducto));

    }

    public ArrayList<beUbicacion> dameUbicacionesDeUnRack(int idRack) throws Exception {
        return (new daoUbicacion().dameUbicacionesDeUnRack(idRack));
    }

}
